package com.code.test.second.link;

/**
 * 203.移除链表元素
 * 力扣题目链接
 * <p>
 * 题意：删除链表中等于给定值 val 的所有节点。
 * <p>
 * 示例 1： 输入：head = [1,2,6,3,4,5,6], val = 6 输出：[1,2,3,4,5]
 * <p>
 * 示例 2： 输入：head = [], val = 1 输出：[]
 * <p>
 * 示例 3： 输入：head = [7,7,7,7], val = 7 输出：[]
 */
public class SCode203 {
    public static void main(String[] args) {
        SNode head = new SNode(1);
        SNode second = new SNode(2);
        SNode third = new SNode(6);
        SNode n4 = new SNode(3);
        SNode n5 = new SNode(4);
        SNode n6 = new SNode(3);
        SNode n7 = new SNode(7);

        head.setNext(second);
        second.setNext(third);
        third.setNext(n4);
        n4.setNext(n5);
        n5.setNext(n6);
        n6.setNext(n7);

        removeNodes(head, 3);
        int a = 2;

    }

    public static void removeNodes(SNode root, int val) {
        SNode cur = root;
        //记录前一个,因为链表是单向链表
        SNode pre = new SNode(-1);
        //这里要把pre.next=cur,才能串起来，相当于搞一个哨兵
        pre.next = cur;
        while (cur != null) {
            //如果找到要删除
            if (cur.val == val) {
                //前一个的next指向cur的下一个
                //即相当于把cur删除
                pre.next = cur.next;
            } else {
                //如果没找到要删除的，那么就记录下前一个
                //那么当前这个就是前一个了
                pre = cur;
            }
            //然后，继续往下
            cur = cur.next;
        }
    }
}
